"use strict";
// ts 是js超集
//7.函数
//7.1 声明式函数 参数设置数据类型 返回值也可以设置数据类型，
//不设定的时候 默认式any类型
function run(speed, unit) {
    return "宝马的速度" + speed + "" + unit;
}
run(100, 'km/h');
let n1 = run(10, "m/s");
// let n2:number=run(20,'m/s');//Error 返回值式string
// run(1,1); //Error  unit是string
//7.2 可选参数 ?
function say(username, text) {
    return username + text;
}
say('tom', 'talking');
say('jerry');
// say();//Error username是必填参数
//7.3 默认参数
function buy(name, price = 9.9) {
    //函数没有返回值 是void
}
buy('香蕉'); //price就有默认值 
buy("芒果", 10);
//7.4 剩余运算   ...剩余运算 
function addnum(a, b, ...othernum) {
    return a + b;
}
addnum(10, 20);
// 除了 10 20赋值给形参a ,b  剩下的30 40 50 赋值给剩余参数 othernum
addnum(10, 20, 30, 40, 50);
let arr5 = [10, 11, 12, 3];
let arr6 = [...arr5]; //... 展开运算
function addn(a, b) {
    if (typeof a === 'number') { //根据不同的参数 实现不同业务逻辑
        return a + b;
    }
    else if (typeof a == 'string') {
        return String(a + b).trim();
    }
    else {
        return a && b;
    }
}
addn(10, 30);
addn('hello', '赵家兴');
//function addn(a:boolean,b:boolean):boolean;
// addn(true,true); //错误的. 函数重载只有两个重载 要么全是字符串 要么全是数字
//7.6 函数表达式
// let eat=function(){}
// let eat=()=>{}
//(1).直接在函数表达式里面写参数 和 返回值
let eat1 = (name, food = '馒头') => {
    return name + "的早餐吃得" + food;
};
let eat2 = function (name, food = '馒头') {
    return name + "的早餐吃得" + food;
};
let eat3 = function (name, food) {
    return name + "的早餐吃了" + food;
};
let str2 = eat3('小明', '包子');
// let str3:number=eat3('小明','包子');
// eat3('小王',9);
//合并写法
let eat5 = (name, food) => {
    return name + "的早餐吃了" + food;
};
// eat5(10,20);//Error 参数数据类型错误
// let e5:number=eat5('小王','肠粉'); //返回值是string
